package com.py.gs.businese.chatcheck;

public class StringSimilarityTools {

	/**
	 * 字符串相似度检测
	 * 
	 * edit distance（编辑距离）
	 * 
	 * @param checkStr
	 * @param sourceStr
	 * @return
	 */
	public static float similarity(String checkStr, String sourceStr) {
		// 计算两个字符串的长度。
		int len1 = checkStr.length();
		int len2 = sourceStr.length();
		// 建立数组，比字符长度大一个空间
		int[][] dif = new int[len1 + 1][len2 + 1];
		// 赋初值，步骤B。
		for (int a = 0; a <= len1; a++) {
			dif[a][0] = a;
		}
		for (int a = 0; a <= len2; a++) {
			dif[0][a] = a;
		}
		// 计算两个字符是否一样，计算左上的值
		int temp;
		for (int i = 1; i <= len1; i++) {
			for (int j = 1; j <= len2; j++) {
				if (checkStr.charAt(i - 1) == sourceStr.charAt(j - 1)) {
					temp = 0;
				} else {
					temp = 1;
				}
				// 取三个值中最小的
				dif[i][j] = min(dif[i - 1][j - 1] + temp, dif[i][j - 1] + 1, dif[i - 1][j] + 1);
			}
		}
		return 1 - (float) dif[len1][len2] / Math.max(checkStr.length(), sourceStr.length());
	}

	// 得到最小值
	public static int min(int... is) {
		int min = Integer.MAX_VALUE;
		for (int i : is) {
			if (min > i) {
				min = i;
			}
		}
		return min;
	}
}
